Conventional techniques for the functional validation (or verification) of web applications typically involve the use of capture-replay tools such as Selenium, WebKing, and Sahi. Using these frameworks, a user desiring to validate a particular web application manually exercises the application through various test scenarios, one test scenario at a time. The actions taken by the user while exercising the application are recorded by the tool at, for example, a Hyper Text Markup Language (HTML) Document Object Model (DOM) level and can be replayed back at a later time, usually with user-defined assertions regarding expected behavior, inserted at various steps. This technique of validation, however, requires a substantial amount of manual effort. While frameworks such as JsUnit can be used to perform unit testing of the JavaScript code in the application, this manner of testing is by its very nature very localized, language specific, and also manually intensive.
Another validation technique involves reverse engineering a model of a desktop graphical user interface (GUI) application with the objective of generating test cases. However, while desktop GUI applications may share some of the rich user-interface and interactivity of modern dynamic web applications, modern dynamic web applications have other features such as, for example, synchronous client-server communication and a DOM-based user interface, which are not shared or present in conventional desktop GUI applications. Furthermore, these and other conventional techniques remain increasingly ill-suited for increasingly dynamic web applications, particularly those web applications utilizing asynchronous techniques such as Asynchronous JavaScript and XML (AJAX). Still other validation techniques for web applications generally propose testing of web applications by representing relevant behavior through some kind of state-based model and then checking the model using various conventional techniques. Such approaches specify the model manually and are generally geared towards traditional, static, and/or non-user interactive web applications. Furthermore, these approaches typically involve generating test traces from the model and then checking these traces one at a time.